home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / Blogowanie poza sfera / Scribefire-1.4.2 / scribefire-1.4.2-fx+fl.xpi / chrome / content / io.js < prev    next >
Encoding:
Text File  |  2006-08-15  |  7.6 KB  |  233 lines

  1. // Basic JavaScript File and Directory IO module
  2. // Based on MonkeeSage's code, v0.1
  3. // A few modifications were made (By asquella), see 
  4. //  <http://bugzilla.mozdev.org/show_bug.cgi?id=9070>
  5. // The original version is available at <http://gratisdei.com/io.js>
  6. // For more information about file I/O see
  7. //  <http://kb.mozillazine.org/Dev_:_Extensions_:_Example_Code_:_File_IO>
  8.  
  9. if (typeof(PerFormancing_IO_Module) != 'boolean') {
  10.     var PerFormancing_IO_Module = true;
  11.  
  12.     var PerFormancingFileIO = {
  13.         localfileCID  : '@mozilla.org/file/local;1',
  14.         localfileIID  : Components.interfaces.nsILocalFile,
  15.  
  16.         finstreamCID  : '@mozilla.org/network/file-input-stream;1',
  17.         finstreamIID  : Components.interfaces.nsIFileInputStream,
  18.  
  19.         foutstreamCID : '@mozilla.org/network/file-output-stream;1',
  20.         foutstreamIID : Components.interfaces.nsIFileOutputStream,
  21.  
  22.         sinstreamCID  : '@mozilla.org/scriptableinputstream;1',
  23.         sinstreamIID  : Components.interfaces.nsIScriptableInputStream,
  24.  
  25.         suniconvCID   : '@mozilla.org/intl/scriptableunicodeconverter',
  26.         suniconvIID   : Components.interfaces.nsIScriptableUnicodeConverter,
  27.  
  28.         open   : function(path) {
  29.             try {
  30.                 var file = Components.classes[this.localfileCID]
  31.                                 .createInstance(this.localfileIID);
  32.                 file.initWithPath(path);
  33.                 return file;
  34.             }
  35.             catch(e) {
  36.                 return false;
  37.             }
  38.         },
  39.  
  40.         read   : function(file, charset) {
  41.             try {
  42.                 var data     = new String();
  43.                 var fiStream = Components.classes[this.finstreamCID]
  44.                                     .createInstance(this.finstreamIID);
  45.                 var siStream = Components.classes[this.sinstreamCID]
  46.                                     .createInstance(this.sinstreamIID);
  47.                 fiStream.init(file, 1, 0, false);
  48.                 siStream.init(fiStream);
  49.                 data += siStream.read(-1);
  50.                 siStream.close();
  51.                 if (charset) {
  52.                     data = this.toUnicode(charset, data);
  53.                 }
  54.                 return data;
  55.             } 
  56.             catch(e) {
  57.                 return false;
  58.             }
  59.         },
  60.  
  61.         write  : function(file, data, mode, charset) {
  62.             try {
  63.                 var foStream = Components.classes[this.foutstreamCID]
  64.                                     .createInstance(this.foutstreamIID);
  65.                 if (charset) {
  66.                     data = this.fromUnicode(charset, data);
  67.                 }
  68.                 var flags = 0x02 | 0x08 | 0x20; // wronly | create | truncate
  69.                 if (mode == 'a') {
  70.                     flags = 0x02 | 0x10; // wronly | append
  71.                 }
  72.                 foStream.init(file, flags, 0664, 0);
  73.                 foStream.write(data, data.length);
  74.                 // foStream.flush();
  75.                 foStream.close();
  76.                 return true;
  77.             }
  78.             catch(e) {
  79.                 return false;
  80.             }
  81.         },
  82.  
  83.         create : function(file) {
  84.             try {
  85.                 file.create(0x00, 0664);
  86.                 return true;
  87.             }
  88.             catch(e) {
  89.                 return false;
  90.             }
  91.         },
  92.  
  93.         unlink : function(file) {
  94.             try {
  95.                 file.remove(false);
  96.                 return true;
  97.             }
  98.             catch(e) {
  99.                 return false;
  100.             }
  101.         },
  102.  
  103.         path   : function(file) {
  104.       // file is nsIFile
  105.       var ios = Components.classes["@mozilla.org/network/io-service;1"].
  106.         getService(Components.interfaces.nsIIOService);
  107.       var fileHandler = ios.getProtocolHandler("file").
  108.         QueryInterface(Components.interfaces.nsIFileProtocolHandler);
  109.       return fileHandler.getURLSpecFromFile(file);
  110.         },
  111.  
  112.         toUnicode   : function(charset, data) {
  113.             try{
  114.                 var uniConv = Components.classes[this.suniconvCID]
  115.                                     .createInstance(this.suniconvIID);
  116.                 uniConv.charset = charset;
  117.                 data = uniConv.ConvertToUnicode(data);
  118.             } 
  119.             catch(e) {
  120.                 // foobar!
  121.             }
  122.             return data;
  123.         },
  124.  
  125.         fromUnicode : function(charset, data) {
  126.             try {
  127.                 var uniConv = Components.classes[this.suniconvCID]
  128.                                     .createInstance(this.suniconvIID);
  129.                 uniConv.charset = charset;
  130.                 data = uniConv.ConvertFromUnicode(data);
  131.                 data += uniConv.Finish();
  132.             }
  133.             catch(e) {
  134.                 // foobar!
  135.             }
  136.             return data;
  137.         }
  138.  
  139.     }
  140.  
  141.     var PerFormancingDirIO = {
  142.         dirservCID : '@mozilla.org/file/directory_service;1',
  143.         propsIID   : Components.interfaces.nsIProperties,
  144.         fileIID    : Components.interfaces.nsIFile,
  145.  
  146.         get    : function(type) {
  147.             try {
  148.                 var dir = Components.classes[this.dirservCID]
  149.                                 .getService(this.propsIID) //changed by <asqueella@gmail.com>
  150.                                 .get(type, this.fileIID);
  151.                 return dir;
  152.             }
  153.             catch(e) {
  154.                 return false;
  155.             }
  156.         },
  157.  
  158.         open   : function(path) {
  159.             return PerFormancingFileIO.open(path);
  160.         },
  161.  
  162.         create : function(dir) {
  163.             try {
  164.                 dir.create(0x01, 0664);
  165.                 return true;
  166.             }
  167.             catch(e) {
  168.                 return false;
  169.             }
  170.         },
  171.  
  172.         read   : function(dir, recursive) {
  173.             var list = new Array();
  174.             try {
  175.                 if (dir.isDirectory()) {
  176.                     if (recursive == null) {
  177.                         recursive = false;
  178.                     }
  179.                     var files = dir.directoryEntries;
  180.                     list = this._read(files, recursive);
  181.                 }
  182.             }
  183.             catch(e) {
  184.                 // foobar!
  185.             }
  186.             return list;
  187.         },
  188.  
  189.         _read  : function(dirEntry, recursive) {
  190.             var list = new Array();
  191.             try {
  192.                 while (dirEntry.hasMoreElements()) {
  193.                     list.push(dirEntry.getNext()
  194.                                     .QueryInterface(PerFormancingFileIO.localfileIID));
  195.                 }
  196.                 if (recursive) {
  197.                     var list2 = new Array();
  198.                     for (var i = 0; i < list.length; ++i) {
  199.                         if (list[i].isDirectory()) {
  200.                             files = list[i].directoryEntries;
  201.                             list2 = this._read(files, recursive);
  202.                         }
  203.                     }
  204.                     for (i = 0; i < list2.length; ++i) {
  205.                         list.push(list2[i]);
  206.                     }
  207.                 }
  208.             }
  209.             catch(e) {
  210.                // foobar!
  211.             }
  212.             return list;
  213.         },
  214.  
  215.         unlink : function(dir, recursive) {
  216.             try {
  217.                 if (recursive == null) {
  218.                     recursive = false;
  219.                 }
  220.                 dir.remove(recursive);
  221.                 return true;
  222.             }
  223.             catch(e) {
  224.                 return false;
  225.             }
  226.         },
  227.  
  228.         path   : function (dir) {
  229.             return PerFormancingFileIO.path(dir);
  230.         }
  231.     }
  232. }
  233.